package com.urbane.product.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import javax.persistence.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 商品实体（SPU - Standard Product Unit）
 * 功能：
 *   - 代表一个商品类型（如 iPhone 15 Pro）
 *   - 包含基本信息、类目、品牌、描述、图片等
 *   - 一个 SPU 对应多个 SKU（不同颜色、容量）
 *
 * 数据库表：products
 *
 * 注意：
 *   - 不存储价格、库存（这些是 SKU 的属性）
 *   - 状态：DRAFT（草稿）、ON_SHELF（上架）、OFF_SHELF（下架）
 */
@Data
@Entity
@Table(name = "products")
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id; // 主键 ID

    @Column(length = 200, nullable = false)
    private String name; // 商品名称，如 "iPhone 15 Pro"

    @Column(length = 500)
    private String description; // 商品详情描述（富文本，不展示在列表）

    @Column(length = 200)
    private String brand; // 品牌，如 "Apple"

    @Column(length = 100)
    private String categoryPath; // 类目路径，如 "数码/手机/iPhone"，用于快速过滤

    @Column(length = 500)
    private String mainImage; // 主图 URL

    @Column(length = 1000)
    private String images; // 多图 JSON 数组，如 ["img1.jpg", "img2.jpg"]

    @Column(length = 100)
    private String videoUrl; // 视频介绍 URL

    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private ProductStatus status = ProductStatus.DRAFT; // 商品状态：草稿/上架/下架

    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "GMT+8")
    private LocalDateTime createdAt; // 创建时间

    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "GMT+8")
    private LocalDateTime updatedAt; // 更新时间

    // ========== 构造函数 ==========
    public Product() {}

    public Product(String name, String brand, String categoryPath, String mainImage) {
        this.name = name;
        this.brand = brand;
        this.categoryPath = categoryPath;
        this.mainImage = mainImage;
        this.createdAt = LocalDateTime.now();
        this.updatedAt = LocalDateTime.now();
    }
}